package com.ruima.study.jdk21.demo2;

import java.util.List;
import java.util.stream.Stream;

/**
 * <p>
 * <p></p>
 * <p>
 * <p>Copyright (c) 2024/07/06/星期六 13:29, 马锐个人 All Rights Reserve</p>
 *
 * @author marui
 * @version [V1.0]
 */
public class Demo2Stream {
    public static void main(String[] args) {

        // takeWhile 顺序返回符合条件的值，直到条件不符合时即终止继续判断，
        // 此外toList方法的加入，也大大减少了节省了代码量，免去了调用collect(Collectors::toList)方法了
        List<Integer> list = Stream.of(2, 2, 3, 4, 5, 6, 7, 8, 9, 10).takeWhile(i -> (i % 2 == 0)).toList(); // 返回2, 2
        System.out.println("takeWhile" + list);

        // dropWhile 顺序去掉符合条件的值，直到条件不符合时即终止继续判断
        List<Integer> list1 = Stream.of(2, 2, 3, 4, 5, 6, 7, 8, 9, 10).dropWhile(i -> (i % 2 == 0)).toList(); //返回3, 4, 5, 6, 7, 8, 9, 10
        System.out.println("dropWhile" + list);

        // ofNullable，支持传入空流，若没有这个且传入一个空流，那么将会抛NPE
        var nullStreamCount = Stream.ofNullable(null).count(); //返回0

        // 以下两行都将输出0到9
        Stream.iterate(0, n -> n < 10, n -> n + 1).forEach(x -> System.out.println(x));
        Stream.iterate(0, n -> n + 1).limit(10).forEach(x -> System.out.println(x));
    }
}
